const Service = require('egg').Service

class CacheService extends Service {
  /**
   * 读取缓存
   * @param {String} key
   * @returns
   */
  async get(key) {
    const { ctx } = this

    if (!ctx.model.Cache) return

    return ctx.model.Cache.findOne({
      key,
      expire: {
        $gt: new Date(),
      },
    })
      .sort({
        _id: 'DESC',
      })
      .then((doc) => {
        if (doc) {
          ctx.logger.info('[Service Cache] 缓存成功', key)
          return doc.value
        }
      })
  }

  /**
   * 设置缓存
   * @param {String} key
   * @param {Any} value
   * @param {Number} time
   * @returns
   */
  async set(key, value, time = 60) {
    const { ctx } = this

    if (!ctx.model.Cache) return

    ctx.logger.info('[Service Cache] 设置缓存', key, time + '毫秒')

    return ctx.model.Cache.updateOne(
      { key },
      {
        key,
        value,
        time,
      },
      {
        upsert: true, // 不存在插入
        // setDefaultsOnInsert: true, // 允许插入默认值
      }
    )
  }
}

module.exports = CacheService
